package cn.glinks.liuhe.utils;

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * Des:时间格式转换类
 *
 * @author MarsBlade of Cyh
 * @created 2017/3/27 21:08
 */
public class TimeTransformUtils {

    /**
     * 将时间格式字符串转换为时间
     *
     * @param pattern 时间格式(例如"yyyy-MM-dd HH:mm:ss")
     * @param strDate String形式的时间
     * @return Date
     */
    public static Date strToDate(String pattern, String strDate) {
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        ParsePosition pos = new ParsePosition(0);
        Date strtodate = formatter.parse(strDate, pos);
        return strtodate;
    }

    /**
     * 将时间转换为字符串
     *
     * @param pattern  时间格式(例如"yyyy-MM-dd HH:mm:ss")
     * @param dateDate Date形式的时间
     * @return String
     */
    public static String dateToStr(String pattern, java.util.Date dateDate) {
        SimpleDateFormat formatter = new SimpleDateFormat(pattern);
        String dateString = formatter.format(dateDate);
        return dateString;
    }

    /**
     * 返回当前系统时间(Date形式)
     *
     * @return Date
     */
    public static Date getNowDate() {
        return new Date();
    }

    /**
     * 返回当前系统时间(字符串形式)
     *
     * @param pattern 时间格式(例如"yyyy-MM-dd HH:mm:ss")
     * @return String
     */
    public static String getNowDateStr(String pattern) {
        return new SimpleDateFormat(pattern, Locale.getDefault()).format(new Date());
    }

    /**
     * 将ISODate时间格式字符串转换为Date格式时间
     *
     * @param time 时间格式(例如"2017-04-12T12:41:20.314Z")
     * @return Date
     */
    public static Date fromISODate(String time) {
        if (!time.matches("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z")) {
            return null;
        }
        time = time.replaceFirst("T", " ").replaceFirst(".\\d{3}Z", "");
        Date date = formatDate(time);
        Calendar ca = Calendar.getInstance();
        ca.setTime(date);
        ca.add(Calendar.HOUR_OF_DAY, 8);
        return ca.getTime();
    }

    public static Date formatDate(String time){
        SimpleDateFormat sdf =   new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            return sdf.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }
}
